const nunjucks = require('nunjucks');
const { objMod } = require('../models');

let res = {

    // 发表说说
    "/doPublish": ["post", async (ctx) => {

        let userName = ctx.session.username;
        let userId = ctx.session.userId;

        // 获取发表框里的内容
        let manyText = ctx.request.body.manyText;

        console.log("要发表的内容：" + manyText);

        //判断id存在，用户名存在，输入框有内容
        if (userId && userName && manyText !== "" && manyText !== null) {


            //定义objMod下的Message模块
            let Message = objMod.Message;

            // 创建该表，这将检查数据库中表的当前状态
            await Message.sync({ alter: true })

            try {
                //向说说表中插入数据
                await Message.create({ fromUserId: userId, content: manyText });

                // 跳到登录界面
                ctx.redirect("/index");

            } catch (error) {

                ctx.body = nunjucks.renderString("<script>alert('发表说说失败')</script>");
                console.log("发表说说失败" + error);
            }
        }
        else {
            //跳到说说界面          
            ctx.body = await nunjucks.renderString(`
        <script type="text/javascript">
            alert("发表失败,请输入发表的内容");
            window.location.href = "/index";//跳转后的页面
         </script>
           `);
        }
    }],

    //吐槽一下
    "/doComment": ["post", async (ctx) => {
        // 我的思路：一、1.获取发表说说的id
        //              2.当前用户id
        //              3.吐槽的内容
        //          二、将.当前用户id、说说的id、吐槽的内容插入表格中

        //当前用户id
        let userId = ctx.session.userId;
        // console.log("当前用户id" + userId);

        //说说id
        let msgId = ctx.request.body.msgId;
        // console.log("说说id:" + msgId);

        // 获取发表框里的内容
        let commentText = ctx.request.body.comsValue;
        // console.log("发表框里的内容" + commentText);


        //判断userId存在，msgId存在，输入框有内容
        if (userId && msgId && commentText != null && commentText !== "") {

            //定义objMod下的Comment模块
            let Comment = objMod.Comment;

            // 创建该表，这将检查数据库中表的当前状态
            await Comment.sync({ alter: true })

            try {

                //向说说表中插入数据    // fromUserId | msgId | applaud | content
                await Comment.create({ fromUserId: userId, msgId: msgId, content: commentText });
                console.log("插入成功");

                // 跳到登录界面
                ctx.redirect("/index");

            } catch (error) {

                ctx.body = nunjucks.renderString("<script>alert('吐槽说说失败')</script>");
                console.log("吐槽说说失败" + error);
            }

        } else {
            //跳到说说界面          
            ctx.body = await nunjucks.renderString(`
            <script type="text/javascript">
            alert("吐槽说说失败,请输入吐槽的内容");
            window.location.href = "/index";//跳转后的页面
         </script>
           `);
        }

    }],
    //回复
    "/reply": ["post", async (ctx) => {

        // 我的思路：一、1.获取发表说说的id
        //              2.当前用户id
        //              3.被回复用户id
        //              4.回复的内容
        //          二、将.当前用户id、被回复用户id、回复的内容插入表格中

        //当前用户
        let userName = ctx.session.username;

        //说说id
        let msgId = ctx.request.body.msgId;
        //当前用户id
        let userId = ctx.session.userId;
        // 被回复用户
        let formUser = ctx.request.body.formUser;
        console.log("被回复的用户：" + formUser);
        // 获取回复框里的内容
        let commentMsg = ctx.request.body.commentMsg;

        // 在用户表里查询发表说说的用户的信息和发表评论的用户的信息
        let users = await objMod.Users.findOne({
            where: {
                username: formUser
            }
        });

        // 被回复的用户id：
        let toUserId = users.id;

        // console.log("说说id:" + msgId);
        // console.log("当前用户id" + userId);
        // console.log("被回复的用户id：" + toUserId);
        // console.log("发表框里的内容" + commentMsg);


        //判断userId存在，msgId存在，输入框有内容
        if (userId && msgId && toUserId && commentMsg != null && commentMsg !== "") {

            //定义objMod下的Comment模块
            let Comment = objMod.Comment;

            // 创建该表，这将检查数据库中表的当前状态
            await Comment.sync({ alter: true })

            try {

                //如果自己回复自己
                if (userId == toUserId) {

                    ctx.body = { code: 2000, msg: '不能自己回复自己哦' };

                }
                else {
                    //向说说表中插入数据   fromUserId | toUserId | msgId | content
                    await Comment.create({ fromUserId: userId, toUserId: toUserId, msgId: msgId, content: commentMsg });

                    ctx.body = { code: 200, msg: '用户插入成功', userName: userName, formUser: formUser, msgId: msgId, content: commentMsg };

                }


            } catch (error) {

                ctx.body = nunjucks.renderString("<script>alert('吐槽说说失败')</script>");
                console.log("吐槽说说失败" + error);

            }

        } else {
            //跳到说说界面          
            ctx.body = await nunjucks.renderString(`
            <script type="text/javascript">
            alert("回复说说失败,请输入回复的内容");
            window.location.href = "/index";//跳转后的页面
         </script>
           `);
        }

    }],
    //点赞
    "/tags": ["post", async (ctx) => {
        // userId | msgId | applaud
        //当前用户
        let userName = ctx.session.username;

        //说说id
        let msgId = ctx.request.body.msgId;

        //当前用户id
        let userId = ctx.session.userId;

        console.log("说说id:" + msgId);
        console.log("当前用户id" + userId);

        //判断userId存在，msgId存在，输入框有内容
        if (userId && msgId) {

            //定义objMod下的like模块
            let Like = objMod.Like;

            // 创建该表，这将检查数据库中表的当前状态
            await Like.sync({ alter: true })

            // 查询like表中当前id对当前说说有没有点赞
            let likeStatus = await Like.findOne({
                where: {
                    userId: userId,
                    msgId: msgId
                }
            });

            console.log(likeStatus);

            try {
                //判断当前点赞状态
                //没点过赞
                if (likeStatus == null) {
                    await Like.create({ userId: userId, msgId: msgId, applaud: true });
                    console.log("插入成功,第一点赞");
                    ctx.body = { code: 200, msg: '插入成功,第一点赞', userName: userName, msgId: msgId};
                }
                else {
                    if (likeStatus.applaud === true) {

                        await Like.update({ applaud: false },
                            {
                                where: {
                                    userId: userId,
                                    msgId: msgId
                                }

                            });

                        console.log("修改成功");
                        ctx.body = { code: 200, msg: '修改成功', userName: userName, msgId: msgId,applaud:likeStatus.applaud };
                    } else {
                        await Like.update({ applaud: true },
                            {
                                where: {
                                    userId: userId,
                                    msgId: msgId
                                }
                            });

                        console.log("修改成功");
                        ctx.body = { code: 200, msg: '修改成功', userName: userName, msgId: msgId,applaud:likeStatus.applaud };
                    }
                }

            } catch (error) {
                ctx.body = nunjucks.renderString("<script>alert('点赞说说失败')</script>");
                console.log("点赞说说失败：" + error);

            }

        } else {
            console.log("当前用户或说说不存在");
        }
    }
    ]
}


module.exports = res;